// pages/recommendSong/recommendSong.js
import PubSub from 'pubsub-js';
import request from '../../utils/request'

// 获取全局实例
let { playList, playListId, randomMusicArr } = getApp().globalData;
let musicIndex = 0; // 点击音乐的下标

Page({
  /**
   * 页面的初始数据
   */
  data: {
    day: new Date().getDate(),
    month: `${(new Date().getMonth() + 1)}`.padStart(2, '0'),
    sentence: "这个世界很大，告别的方式有多少种，人生的正确答案就有多少个。",
    isIdExist: true,

    recommendList: [], // 歌单歌曲
    currentMusicId: "", // 当前播放音乐的id
    currentPlayListId: "", // 当前歌单的id
    currentPlayListTitle: "",//当前歌单的标题
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let userInfo = wx.getStorageSync('userInfo');
    if (!userInfo) {
      wx.showToast({
        title: '请先登录',
        icon: "none",
        success: () => {
          wx.reLaunch({
            url: '/pages/login/login',
          })
        }
      })
    }

    // 修改当前播放的音乐id
    // 【注意：getApp().globalData.musicId，这样写是因为page外面的变量只会执行一次，无论该页面是否被卸载，所以另一个页面改了里面的值，这里同一个值也不会更新】
    this.setData({
      currentMusicId: getApp().globalData.musicId,
      currentPlayListId: options.id ? options.id : -1,
      currentPlayListTitle: options.title ? options.title : '每日推荐',
      isIdExist: options.id ? false : true
    })

    // 获取美句
    this.getBeautifulSentence();
    // 获取所有音乐的数据
    this.getRecommendList(options.id, options.title);

    // 订阅歌曲切歌，发布歌曲id
    this.handlePubSub();
  },

  // 订阅歌曲切歌，发布歌曲id
  handlePubSub() {
    PubSub.unsubscribe('switchType');
    // 订阅来自songDetail页面发布的消息
    PubSub.subscribe('switchType', (msg, publishdata) => {
      let { type, playOrder } = publishdata
      let { currentMusicId } = this.data;

      //【每改变一次playOrder，只需调整一次musicIndex】
      if (playOrder == 1) { // 随机播放
        musicIndex = randomMusicArr.findIndex((item) => item.id == currentMusicId)
      } else {
        musicIndex = playList.findIndex((item) => item.id == currentMusicId)
      }

      // 顺序播放直接执行【单曲循环，点击也会切换，播完才单曲】
      if (type === 'pre') { // 上一首
        (musicIndex === 0) && (musicIndex = playList.length);
        musicIndex -= 1;
      } else { // 下一首
        (musicIndex === playList.length - 1) && (musicIndex = -1);
        musicIndex += 1;
      }

      if (playOrder == 1) currentMusicId = randomMusicArr[musicIndex].id;
      else currentMusicId = playList[musicIndex].id;

      this.setData({ currentMusicId })
      // 将musicId回传给songDetail页面
      PubSub.publish('musicId', currentMusicId)
    });
  },

  // 跳转至songDetail页面
  toSongDetail(event) {
    let { id, index } = event.currentTarget.dataset;

    // 随机播放，打乱数组的函数[找不到返回-1，这个是否置空randomMusicArr，再push]
    if (randomMusicArr.length == 0) {
      randomMusicArr.push(...this.data.recommendList)
      randomMusicArr.sort(() => Math.random() - 0.5)
    } else {
      // randomMusicArr有值，查看是否一个源，通过歌单id判断，下面这个不是一个源才重新记录
      if (this.data.currentPlayListId != playListId) {
        console.log('当前歌单还没有播放，不是一个歌单，记录随机播放数组');
        randomMusicArr = [];
        randomMusicArr.push(...this.data.recommendList)
        randomMusicArr.sort(() => Math.random() - 0.5)
      }
    }

    // 跳转代表要播放，记录【当前歌单的id、歌单列表】在globalData中
    playListId = this.data.currentPlayListId;
    playList = this.data.recommendList;

    musicIndex = index; // 点击音乐的下表
    this.setData({ currentMusicId: id })

    // 路由跳转传参： query参数
    // 不能直接将song对象作为参数传递，长度过长，会被自动截取掉
    // url: '/pages/songDetail/songDetail?songPackage=' + JSON.stringify(songPackage)
    wx.navigateTo({
      url: `/pages/songDetail/songDetail?musicId=${id}&source=${this.data.currentPlayListTitle}`
    })
  },

  // 获取用户每日推荐数据
  async getRecommendList(id, title) {
    let recommendListData = await (id ? request('/playlist/track/all', { id }) : request('/recommend/songs'));
    let recommendList = id ? recommendListData.songs : recommendListData.data.dailySongs;
    wx.setNavigationBarTitle({
      title: id ? title : '每日推荐'
    });

    // 把多个作者用/拼接，再拼接专辑，再拼接原唱【如果有】,再修改已经播放的下表
    recommendList.map(item => {
      item["aralosongName"] = item.ar.map(arName => arName.name).join('/')
      if (item.al.name) item["aralosongName"] = item["aralosongName"] + " - " + item.al.name
      if (item.originSongSimpleData) item["aralosongName"] = item["aralosongName"] + " | 原唱：" + item.originSongSimpleData.artists.map(os => os.name).join('/')
    })

    this.setData({ recommendList })
  },

  // 获取美句
  async getBeautifulSentence() {
    wx.request({
      url: `https://v1.hitokoto.cn/?c=j&encode=text&min_length=${Math.floor(Math.random() * 15) + 20}`,
      success: (res) => {
        if (res.statusCode == 200)
          this.setData({ sentence: res.data })
      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})